Dynamically-typed languages are in widespread use, but lack effective support for multithreading. Although dynamic object representations are memory-efficient and flexible, permitting reshaping and resizing, they are not yet safe in multithreaded environments. For example, race conditions due to concurrently executing threads may cause unpredictable results. Current approaches to supporting multithreading in dynamically-typed languages include: disallowing sharing of objects between threads, imposing high synchronization overhead when accessing objects, and implementing objects in an unsafe manner, thereby burdening the application programmer with the task of performing synchronization in a safe manner.